package island.gotenyama.wand.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 結果をあらわすクラス
 *
 * @author tk
 */
public class Result implements Serializable {

	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * お知らせ有無
	 */
	private Boolean info;

	/**
	 * エラー有無
	 */
	private Boolean error;

	/**
	 * お知らせメッセージキーリスト
	 */
	private List<Message> infoMessageList;

	/**
	 * エラーメッセージキーリスト
	 */
	private List<Message> errorMessageList;

	/**
	 * コンストラクタ
	 */
	public Result() {
		this.infoMessageList = null;
		this.errorMessageList = null;
		this.info = Boolean.FALSE;
		this.error = Boolean.FALSE;
	}

	/**
	 * コンストラクタ
	 *
	 * @param infoMessageList お知らせメッセージリスト
	 * @param errorMessageList エラーメッセージリスト
	 */
	public Result(List<Message> infoMessageList, List<Message> errorMessageList) {
		this.infoMessageList = infoMessageList;
		if (infoMessageList != null && infoMessageList.size() > 0) {
			info = Boolean.TRUE;
		} else {
			info = Boolean.FALSE;
		}
		this.errorMessageList = errorMessageList;
		if (errorMessageList != null && errorMessageList.size() > 0) {
			error = Boolean.TRUE;
		} else {
			error = Boolean.FALSE;
		}
	}

	/**
	 * お知らせメッセージを追加する。
	 *
	 * @param infoMessageList お知らせメッセージリスト
	 */
	public void addInfoMessage(List<Message> infoMessageList) {
		if (infoMessageList == null || infoMessageList.size() == 0) {
			return;
		}
		this.info = Boolean.TRUE;
		if (this.infoMessageList == null) {
			this.infoMessageList = new ArrayList<Message>();
		}
		this.infoMessageList.addAll(infoMessageList);
	}

	/**
	 * お知らせメッセージを追加する。
	 *
	 * @param infoMessageList お知らせメッセージリスト
	 */
	public void addInfoMessage(Message... infoMessage) {
		if (infoMessage == null || infoMessage.length == 0) {
			return;
		}
		this.info = Boolean.TRUE;
		if (this.infoMessageList == null) {
			this.infoMessageList = new ArrayList<Message>();
		}
		for (Message message : infoMessage) {
			this.infoMessageList.add(message);
		}
	}

	/**
	 * エラーメッセージを追加する。
	 *
	 * @param infoMessageList お知らせメッセージリスト
	 */
	public void addErrorMessage(List<Message> errorMessageList) {
		if (errorMessageList == null || errorMessageList.size() == 0) {
			return;
		}
		this.error = Boolean.TRUE;
		if (this.errorMessageList == null) {
			this.errorMessageList = new ArrayList<Message>();
		}
		this.errorMessageList.addAll(errorMessageList);
	}

	/**
	 * エラーメッセージを追加する。
	 *
	 * @param infoMessageList エラーメッセージ
	 */
	public void addErrorMessage(Message... errorMessageList) {
		if (errorMessageList == null || errorMessageList.length == 0) {
			return;
		}
		this.error = Boolean.TRUE;
		if (this.errorMessageList == null) {
			this.errorMessageList = new ArrayList<Message>();
		}
		for (Message message : errorMessageList) {
			this.errorMessageList.add(message);
		}
	}

	/**
	 * お知らせ有無を返す。
	 *
	 * @return お知らせ[有]なら真
	 */
	public Boolean hasInfo() {
		return this.info;
	}

	/**
	 * エラー有無を返す。
	 *
	 * @return エラー[有]なら真
	 */
	public Boolean hasError() {
		return this.error;
	}

	/**
	 * お知らせメッセージリストを取得する。
	 *
	 * @return お知らせメッセージリスト
	 */
	public List<Message> getInfoMessageList() {
		return infoMessageList;
	}

	/**
	 * お知らせメッセージリストを設定する。
	 *
	 * @param infoMessageList お知らせメッセージリスト
	 */
	public void setInfoMessageList(List<Message> infoMessageList) {
		this.infoMessageList = infoMessageList;
	}

	/**
	 * エラーメッセージリストを取得する。
	 *
	 * @return エラーメッセージリスト
	 */
	public List<Message> getErrorMessageList() {
		return errorMessageList;
	}

	/**
	 * エラーメッセージリストを設定する。
	 *
	 * @param errorMessageList エラーメッセージリスト
	 */
	public void setErrorMessageList(List<Message> errorMessageList) {
		this.errorMessageList = errorMessageList;
	}
}
